package org.uc3m.ed.tad.lista;

/**
 * Definicion del nodo utilizado para implementar el TAD Lista como una lista
 * doblemente enlazada.
 * 
 * @author DEI - ED
 * @version 1.0
 */
class ListaEnlazadaNodo<E> {

	/**
	 * Elemento, dato, representado por el nodo.
	 */
	private E _elemento;

	/**
	 * Referencia al elemento situado despues del nodo en la lista.
	 * 
	 * @see ListaEnlazadaNodo<E>
	 */
	private ListaEnlazadaNodo<E> _siguiente;
	
	/**
	 * Crea un nodo de la lista sin datos.
	 */
	public ListaEnlazadaNodo() {
		_elemento = null;
		_siguiente = null;
	}
	
	/**
	 * Crea un nodo de la lista para un dato determinado.
	 * 
	 * @param elemento
	 *            Dato representado por el nodo.
	 */
	public ListaEnlazadaNodo(E elemento) {
		_elemento = elemento;
		_siguiente = null;
	}		

	/**
	 * Asigna el dato representado por el nodo
	 * 
	 * @param elemento
	 *            Dato representado por el nodo.
	 */
	void asignarElemento(E elemento) {
		_elemento = elemento;
	}

	/**
	 * Asigna el elemento situado en la posicion posterior al nodo en la lista.
	 * 
	 * @param siguiente
	 *            Nodo posterior en la lista.
	 */
	void asignarSiguiente(ListaEnlazadaNodo<E> siguiente) {
		_siguiente = siguiente;
	}

	/**
	 * Recupera el valor representado por el elemento.
	 * 
	 * @return Valor representado por el elemento.
	 */
	E obtenerElemento() {
		return _elemento;
	}

	/**
	 * Recupera el nodo que ocupa la posicion posterior en la lista.
	 * 
	 * @return Elemento que ocupa la posicion posterior en la lista.
	 */
	ListaEnlazadaNodo<E> obtenerSiguiente() {
		return _siguiente;
	}
}
